import java.util.HashMap;

public class Solution {
    public static void main(String[] args) {

    }

    public int[] twoSum1(int[] nums, int target) {
        /**
         * 两数之和-暴力2
         *  此种暴力枚举与寻常的暴力枚举不同，主要是第二次循环是枚举i之前的元素，这样的好处是便于使用哈希表
         *  如此即可在循环中使用哈希表*/
        // 1 预处理
        int n = nums.length;

        // 2 暴力枚举
        for(int i = 0; i < n; i++) {
            for(int j = i-1; j >= 0; j--) {
                if(nums[i] + nums[j] == target) {
                    return new int[]{i, j};
                }
            }
        }

        // 3 返回值
        return null;
    }


    public int[] twoSum(int[] nums, int target) {
        /**
         * 两数之和-暴力2
         *  此种暴力枚举与寻常的暴力枚举不同，主要是第二次循环是枚举i之前的元素，这样的好处是便于使用哈希表
         *  如此即可在循环中使用哈希表*/
        // 1 预处理
        int n = nums.length;
        HashMap<Integer, Integer> map = new HashMap<>();

        // 2 暴力枚举
        for(int i = 0; i < n; i++) {
            // -枚举一个数就存储一个数，减少第二次暴力枚举所需的开销
            if(map.containsKey(target - nums[i])) {
                return new int[]{i, map.get(target - nums[i])};
            }
            map.put(nums[i], i);
        }

        // 3 返回值
        return null;
    }
}
